package jogoanagrama;

import java.util.Random;
import java.util.Scanner;

/**
 * Jogo anagrama implementado com técnica estruturada.
 *
 * @author Guilherme de Lemos
 */
public class JogoAnagramaEstruturado {

    public static void main(String[] args) {
        System.out.println("Jogo Anagrama");
        System.out.println("Serão dadas palavras bagunçadas "
                + "onde você deverá adivinhar a palavra certa.");
        System.out.println("----------");

        /*
         * Preparação
         */
        Scanner leitor = new Scanner(System.in);
        Random geradorAleatorio = new Random();
        String[] palavras = {"java", "jvm", "jdk", "jre", "classe", "objeto", "class",
            "public", "private", "protected", "void", "static", "main"};
        int quantidadeAcertos = 0;
        int quantidadeErros = 0;

        /*
         * Identificação do Jogador
         */
        System.out.print("Qual o seu nome? ");
        String nomeJogador = leitor.nextLine();

        System.out.println(nomeJogador + ", vamos começar!");

        String jogarNovamente = "s";
        while (jogarNovamente.equals("s")) {

            /*
             * Escolher uma palavra aleatória dentre as existentes
             */
            int indicePalavra = geradorAleatorio.nextInt(palavras.length);
            String palavra = palavras[indicePalavra];

            /*
             * Bagunçar palavra
             */
            String anagrama = "";
            int tamanhoPalavra = palavra.length();
            int[] ordem = new int[tamanhoPalavra];
            for (int i = 0; i < ordem.length; i++) {
                ordem[i] = -1;
            }
            for (int i = 0; i < tamanhoPalavra; i++) {
                int novaOrdem = -1;
                boolean repetido = true;
                while (repetido) {
                    repetido = false;
                    novaOrdem = geradorAleatorio.nextInt(tamanhoPalavra);
                    for (int j = 0; j < ordem.length; j++) {
                        if (ordem[j] == novaOrdem) {
                            repetido = true;
                            break;
                        }
                    }
                }
                ordem[i] = novaOrdem;
                anagrama += palavra.substring(ordem[i], ordem[i] + 1);
                //System.out.println("Ordem: " + ordem[i]);
            }
            //System.out.println("Palavra: " + palavra + " Anagrama: " + anagrama);
            if(anagrama.equals(palavra)) {
                // o algoritmo não conseguiu bagunçar a palavra
                continue;
            }

            System.out.println("O anagrama é: " + anagrama);
            System.out.print("Qual o seu palpite? ");
            String palpite = leitor.nextLine();
            if (palavra.equals(palpite)) {
                System.out.println("Você acertou!");
                quantidadeAcertos++;
            } else {
                System.out.println("Você errou! A palavra era: " + palavra);
                quantidadeErros++;
            }
            System.out.println("Placar: " + quantidadeAcertos + " acertos, "
                    + quantidadeErros + " erros.");

            System.out.print("Deseja jogar novamente? (s/n) ");
            jogarNovamente = leitor.nextLine();
        }
        System.out.println("Até a próxima.");
    }
}
